/*
 * @Author: your name
 * @Date: 2020-11-03 11:29:05
 * @LastEditTime: 2022-08-17 14:14:45
 * @LastEditors: Please set LastEditors
 * @Description: 事件中心 发布订阅中心
 * @FilePath: \main\src\assets\events\event.js
 */
class Event {
  list = {}
  // 订阅
  on (key, fn) { // 注意 为了保证 重复订阅  这路 这路需要 添加一些条件

    if (!this.list[key]) {
      this.list[key] = []
    }
    this.list[key].push(fn)
  }

  // 发布
  emit () {
    let key = [].shift.call(arguments)
    let fns = this.list[key]
    if (!fns || fns.length === 0) return false
    fns.forEach((cd) => {
      cd.apply(this, arguments)
    })
  }
  // 取消订阅
  remove (key, fn) {
    let fns = this.list[key]
    if (!fns) return false
    if (!fn) {
      fns && (fns.length = 0)
    } else {
      fns.forEach((cd, i) => {
        if (cd === fn) {
          fns.splice(i, 1)
        }
      })
    }
  }
}

export default new Event()